{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5c6f1cd0",
   "metadata": {},
   "source": [
    "#### 1.导入包以及数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "eee8ef71",
   "metadata": {},
   "outputs": [],
   "source": [
    "#导入pandas，并重命名为pd\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn import datasets\n",
    "#导入数据集拆分工具\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import r2_score,mean_squared_error\n",
    "# 导入pytorch包\n",
    "import torch\n",
    "from torch.utils import data\n",
    "from d2l import torch as d2l\n",
    "from torch import nn\n",
    "import seaborn as sns\n",
    "from sklearn.metrics import mean_absolute_error\n",
    "# 设置显示中文字体\n",
    "plt.rcParams[\"font.sans-serif\"] = [\"SimHei\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b5127ab6",
   "metadata": {},
   "outputs": [],
   "source": [
    "#导入数据表\n",
    "#导入 covid.test 表\n",
    "covid_test  = pd.read_csv('data/COVID_19/covid.test.csv', sep = ',')\n",
    "#导入 covid.train 表\n",
    "covid_train = pd.read_csv('data/COVID_19/covid.train.csv', sep = ',')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "23ee62d1",
   "metadata": {},
   "source": [
    "#### 2.数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "95c61ee9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 去除id列\n",
    "covid_train1 = covid_train.drop('id',axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "671db977",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>AL</th>\n",
       "      <th>AK</th>\n",
       "      <th>AZ</th>\n",
       "      <th>AR</th>\n",
       "      <th>CA</th>\n",
       "      <th>CO</th>\n",
       "      <th>CT</th>\n",
       "      <th>FL</th>\n",
       "      <th>GA</th>\n",
       "      <th>ID</th>\n",
       "      <th>...</th>\n",
       "      <th>shop.2</th>\n",
       "      <th>restaurant.2</th>\n",
       "      <th>spent_time.2</th>\n",
       "      <th>large_event.2</th>\n",
       "      <th>public_transit.2</th>\n",
       "      <th>anxious.2</th>\n",
       "      <th>depressed.2</th>\n",
       "      <th>felt_isolated.2</th>\n",
       "      <th>worried_become_ill.2</th>\n",
       "      <th>worried_finances.2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>52.071090</td>\n",
       "      <td>8.624001</td>\n",
       "      <td>29.374792</td>\n",
       "      <td>5.391413</td>\n",
       "      <td>2.754804</td>\n",
       "      <td>19.695098</td>\n",
       "      <td>13.685645</td>\n",
       "      <td>24.747837</td>\n",
       "      <td>66.194950</td>\n",
       "      <td>44.873473</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>58.742461</td>\n",
       "      <td>21.720187</td>\n",
       "      <td>41.375784</td>\n",
       "      <td>9.450179</td>\n",
       "      <td>3.150088</td>\n",
       "      <td>22.075715</td>\n",
       "      <td>17.302077</td>\n",
       "      <td>23.559622</td>\n",
       "      <td>57.015009</td>\n",
       "      <td>38.372829</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>59.109045</td>\n",
       "      <td>20.123959</td>\n",
       "      <td>40.072556</td>\n",
       "      <td>8.781522</td>\n",
       "      <td>2.888209</td>\n",
       "      <td>23.920870</td>\n",
       "      <td>18.342506</td>\n",
       "      <td>24.993341</td>\n",
       "      <td>55.291498</td>\n",
       "      <td>38.907257</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>55.442267</td>\n",
       "      <td>16.083529</td>\n",
       "      <td>36.977612</td>\n",
       "      <td>5.199286</td>\n",
       "      <td>2.575347</td>\n",
       "      <td>21.073800</td>\n",
       "      <td>12.087171</td>\n",
       "      <td>18.608723</td>\n",
       "      <td>67.036197</td>\n",
       "      <td>43.142779</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>60.588783</td>\n",
       "      <td>19.503010</td>\n",
       "      <td>42.631236</td>\n",
       "      <td>11.549771</td>\n",
       "      <td>8.530551</td>\n",
       "      <td>15.896575</td>\n",
       "      <td>11.781634</td>\n",
       "      <td>15.065228</td>\n",
       "      <td>61.196518</td>\n",
       "      <td>43.574676</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>56.762931</td>\n",
       "      <td>21.494159</td>\n",
       "      <td>44.202567</td>\n",
       "      <td>14.996865</td>\n",
       "      <td>2.291745</td>\n",
       "      <td>17.740003</td>\n",
       "      <td>12.822676</td>\n",
       "      <td>18.123344</td>\n",
       "      <td>60.417531</td>\n",
       "      <td>37.156229</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>57.888461</td>\n",
       "      <td>16.770893</td>\n",
       "      <td>37.373472</td>\n",
       "      <td>7.169675</td>\n",
       "      <td>2.631595</td>\n",
       "      <td>20.587449</td>\n",
       "      <td>15.960166</td>\n",
       "      <td>23.710310</td>\n",
       "      <td>58.758735</td>\n",
       "      <td>38.673787</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>57.589848</td>\n",
       "      <td>16.761311</td>\n",
       "      <td>36.874822</td>\n",
       "      <td>11.046907</td>\n",
       "      <td>1.912310</td>\n",
       "      <td>16.800220</td>\n",
       "      <td>13.280423</td>\n",
       "      <td>22.423640</td>\n",
       "      <td>60.934851</td>\n",
       "      <td>43.122513</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>891</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>57.966384</td>\n",
       "      <td>22.696669</td>\n",
       "      <td>45.350415</td>\n",
       "      <td>20.343487</td>\n",
       "      <td>2.385330</td>\n",
       "      <td>16.528265</td>\n",
       "      <td>15.092539</td>\n",
       "      <td>17.476063</td>\n",
       "      <td>54.862386</td>\n",
       "      <td>44.016255</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>892</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>55.920650</td>\n",
       "      <td>17.002257</td>\n",
       "      <td>37.749348</td>\n",
       "      <td>9.955671</td>\n",
       "      <td>1.731796</td>\n",
       "      <td>18.555496</td>\n",
       "      <td>13.776335</td>\n",
       "      <td>21.217106</td>\n",
       "      <td>66.870763</td>\n",
       "      <td>37.930859</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>893 rows × 93 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      AL   AK   AZ   AR   CA   CO   CT   FL   GA   ID  ...     shop.2  \\\n",
       "0    0.0  0.0  0.0  0.0  0.0  1.0  0.0  0.0  0.0  0.0  ...  52.071090   \n",
       "1    0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  58.742461   \n",
       "2    0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  59.109045   \n",
       "3    0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  55.442267   \n",
       "4    0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  60.588783   \n",
       "..   ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...        ...   \n",
       "888  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  56.762931   \n",
       "889  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  57.888461   \n",
       "890  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  ...  57.589848   \n",
       "891  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  57.966384   \n",
       "892  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  55.920650   \n",
       "\n",
       "     restaurant.2  spent_time.2  large_event.2  public_transit.2  anxious.2  \\\n",
       "0        8.624001     29.374792       5.391413          2.754804  19.695098   \n",
       "1       21.720187     41.375784       9.450179          3.150088  22.075715   \n",
       "2       20.123959     40.072556       8.781522          2.888209  23.920870   \n",
       "3       16.083529     36.977612       5.199286          2.575347  21.073800   \n",
       "4       19.503010     42.631236      11.549771          8.530551  15.896575   \n",
       "..            ...           ...            ...               ...        ...   \n",
       "888     21.494159     44.202567      14.996865          2.291745  17.740003   \n",
       "889     16.770893     37.373472       7.169675          2.631595  20.587449   \n",
       "890     16.761311     36.874822      11.046907          1.912310  16.800220   \n",
       "891     22.696669     45.350415      20.343487          2.385330  16.528265   \n",
       "892     17.002257     37.749348       9.955671          1.731796  18.555496   \n",
       "\n",
       "     depressed.2  felt_isolated.2  worried_become_ill.2  worried_finances.2  \n",
       "0      13.685645        24.747837             66.194950           44.873473  \n",
       "1      17.302077        23.559622             57.015009           38.372829  \n",
       "2      18.342506        24.993341             55.291498           38.907257  \n",
       "3      12.087171        18.608723             67.036197           43.142779  \n",
       "4      11.781634        15.065228             61.196518           43.574676  \n",
       "..           ...              ...                   ...                 ...  \n",
       "888    12.822676        18.123344             60.417531           37.156229  \n",
       "889    15.960166        23.710310             58.758735           38.673787  \n",
       "890    13.280423        22.423640             60.934851           43.122513  \n",
       "891    15.092539        17.476063             54.862386           44.016255  \n",
       "892    13.776335        21.217106             66.870763           37.930859  \n",
       "\n",
       "[893 rows x 93 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 去除id列\n",
    "test1 = covid_test.drop(['id'], axis=1)\n",
    "test1"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bc051776",
   "metadata": {},
   "source": [
    "#### 3.特征值选取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ec1d76db",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>AL</th>\n",
       "      <th>AK</th>\n",
       "      <th>AZ</th>\n",
       "      <th>AR</th>\n",
       "      <th>CA</th>\n",
       "      <th>CO</th>\n",
       "      <th>CT</th>\n",
       "      <th>FL</th>\n",
       "      <th>GA</th>\n",
       "      <th>ID</th>\n",
       "      <th>...</th>\n",
       "      <th>shop.2</th>\n",
       "      <th>restaurant.2</th>\n",
       "      <th>spent_time.2</th>\n",
       "      <th>large_event.2</th>\n",
       "      <th>public_transit.2</th>\n",
       "      <th>anxious.2</th>\n",
       "      <th>depressed.2</th>\n",
       "      <th>felt_isolated.2</th>\n",
       "      <th>worried_become_ill.2</th>\n",
       "      <th>worried_finances.2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>62.434539</td>\n",
       "      <td>23.812411</td>\n",
       "      <td>43.430423</td>\n",
       "      <td>16.151527</td>\n",
       "      <td>1.602635</td>\n",
       "      <td>15.409449</td>\n",
       "      <td>12.088688</td>\n",
       "      <td>16.702086</td>\n",
       "      <td>53.991549</td>\n",
       "      <td>43.604229</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>62.024517</td>\n",
       "      <td>23.682974</td>\n",
       "      <td>43.196313</td>\n",
       "      <td>16.123386</td>\n",
       "      <td>1.641863</td>\n",
       "      <td>15.230063</td>\n",
       "      <td>11.809047</td>\n",
       "      <td>16.506973</td>\n",
       "      <td>54.185521</td>\n",
       "      <td>42.665766</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>62.116842</td>\n",
       "      <td>23.593983</td>\n",
       "      <td>43.362200</td>\n",
       "      <td>16.159971</td>\n",
       "      <td>1.677523</td>\n",
       "      <td>15.717207</td>\n",
       "      <td>12.355918</td>\n",
       "      <td>16.273294</td>\n",
       "      <td>53.637069</td>\n",
       "      <td>42.972417</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>61.294809</td>\n",
       "      <td>22.576992</td>\n",
       "      <td>42.954574</td>\n",
       "      <td>15.544373</td>\n",
       "      <td>1.578030</td>\n",
       "      <td>15.295650</td>\n",
       "      <td>12.218123</td>\n",
       "      <td>16.045504</td>\n",
       "      <td>52.446223</td>\n",
       "      <td>42.907472</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>60.664482</td>\n",
       "      <td>22.091433</td>\n",
       "      <td>43.290957</td>\n",
       "      <td>15.214655</td>\n",
       "      <td>1.641667</td>\n",
       "      <td>14.778802</td>\n",
       "      <td>12.417256</td>\n",
       "      <td>16.134238</td>\n",
       "      <td>52.560315</td>\n",
       "      <td>43.321985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2695</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>50.024971</td>\n",
       "      <td>15.090116</td>\n",
       "      <td>30.839219</td>\n",
       "      <td>7.849525</td>\n",
       "      <td>1.760094</td>\n",
       "      <td>14.617563</td>\n",
       "      <td>11.163213</td>\n",
       "      <td>18.742673</td>\n",
       "      <td>68.024690</td>\n",
       "      <td>38.920206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2696</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>49.885129</td>\n",
       "      <td>14.779264</td>\n",
       "      <td>30.617100</td>\n",
       "      <td>7.754800</td>\n",
       "      <td>1.780730</td>\n",
       "      <td>14.513419</td>\n",
       "      <td>11.281241</td>\n",
       "      <td>18.539741</td>\n",
       "      <td>67.855755</td>\n",
       "      <td>39.224244</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2697</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>50.056772</td>\n",
       "      <td>14.961085</td>\n",
       "      <td>30.595194</td>\n",
       "      <td>7.744075</td>\n",
       "      <td>1.921828</td>\n",
       "      <td>14.160990</td>\n",
       "      <td>11.163526</td>\n",
       "      <td>18.702564</td>\n",
       "      <td>67.731162</td>\n",
       "      <td>38.740651</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2698</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>49.620924</td>\n",
       "      <td>14.609582</td>\n",
       "      <td>30.420998</td>\n",
       "      <td>7.687974</td>\n",
       "      <td>1.992580</td>\n",
       "      <td>14.409427</td>\n",
       "      <td>11.330301</td>\n",
       "      <td>19.134697</td>\n",
       "      <td>67.795100</td>\n",
       "      <td>38.595125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2699</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>49.510599</td>\n",
       "      <td>14.464053</td>\n",
       "      <td>30.469791</td>\n",
       "      <td>7.692942</td>\n",
       "      <td>1.966064</td>\n",
       "      <td>14.616400</td>\n",
       "      <td>11.522773</td>\n",
       "      <td>19.295834</td>\n",
       "      <td>68.284078</td>\n",
       "      <td>38.453820</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2700 rows × 93 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       AL   AK   AZ   AR   CA   CO   CT   FL   GA   ID  ...     shop.2  \\\n",
       "0     1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  62.434539   \n",
       "1     1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  62.024517   \n",
       "2     1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  62.116842   \n",
       "3     1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  61.294809   \n",
       "4     1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  60.664482   \n",
       "...   ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...        ...   \n",
       "2695  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  50.024971   \n",
       "2696  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  49.885129   \n",
       "2697  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  50.056772   \n",
       "2698  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  49.620924   \n",
       "2699  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ...  49.510599   \n",
       "\n",
       "      restaurant.2  spent_time.2  large_event.2  public_transit.2  anxious.2  \\\n",
       "0        23.812411     43.430423      16.151527          1.602635  15.409449   \n",
       "1        23.682974     43.196313      16.123386          1.641863  15.230063   \n",
       "2        23.593983     43.362200      16.159971          1.677523  15.717207   \n",
       "3        22.576992     42.954574      15.544373          1.578030  15.295650   \n",
       "4        22.091433     43.290957      15.214655          1.641667  14.778802   \n",
       "...            ...           ...            ...               ...        ...   \n",
       "2695     15.090116     30.839219       7.849525          1.760094  14.617563   \n",
       "2696     14.779264     30.617100       7.754800          1.780730  14.513419   \n",
       "2697     14.961085     30.595194       7.744075          1.921828  14.160990   \n",
       "2698     14.609582     30.420998       7.687974          1.992580  14.409427   \n",
       "2699     14.464053     30.469791       7.692942          1.966064  14.616400   \n",
       "\n",
       "      depressed.2  felt_isolated.2  worried_become_ill.2  worried_finances.2  \n",
       "0       12.088688        16.702086             53.991549           43.604229  \n",
       "1       11.809047        16.506973             54.185521           42.665766  \n",
       "2       12.355918        16.273294             53.637069           42.972417  \n",
       "3       12.218123        16.045504             52.446223           42.907472  \n",
       "4       12.417256        16.134238             52.560315           43.321985  \n",
       "...           ...              ...                   ...                 ...  \n",
       "2695    11.163213        18.742673             68.024690           38.920206  \n",
       "2696    11.281241        18.539741             67.855755           39.224244  \n",
       "2697    11.163526        18.702564             67.731162           38.740651  \n",
       "2698    11.330301        19.134697             67.795100           38.595125  \n",
       "2699    11.522773        19.295834             68.284078           38.453820  \n",
       "\n",
       "[2700 rows x 93 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 分离特征值与标签\n",
    "train = covid_train1.drop(['tested_positive.2'], axis=1)\n",
    "target = covid_train['tested_positive.2']\n",
    "train"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ac6998a9",
   "metadata": {},
   "source": [
    "#### 特征值选取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "cbd0ac5b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# from sklearn.feature_selection import SelectKBest\n",
    "# from sklearn.feature_selection import f_regression\n",
    "# from sklearn.model_selection import train_test_split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "960c1993",
   "metadata": {},
   "outputs": [],
   "source": [
    "# bestfeatures = SelectKBest(score_func=f_regression, k=30)\n",
    "# fit = bestfeatures.fit(train,target)\n",
    "# train_scores = pd.DataFrame(fit.scores_)\n",
    "# train_columns = pd.DataFrame(train.columns)\n",
    "# featureScores = pd.concat([train_columns,train_scores],axis=1)\n",
    "# featureScores.columns = ['Specs','Score'] \n",
    "# # 按照分数排序\n",
    "# featureScores = featureScores.sort_values(by='Score', ascending=False)\n",
    "# featureScores.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "ac06d14d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# # 选取前30\n",
    "# bestfeatures = SelectKBest(score_func=f_regression, k=30)\n",
    "# fit = bestfeatures.fit(train,target)\n",
    "# cols = bestfeatures.get_support(indices=True)\n",
    "# cols"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "b687a34b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# train = train.iloc[:,cols]\n",
    "# # 去除MA列\n",
    "# train1 = train.drop('MA',axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "f754d921",
   "metadata": {},
   "outputs": [],
   "source": [
    "# train1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "be902d52",
   "metadata": {},
   "outputs": [],
   "source": [
    "# test2 = test1.iloc[:,cols]\n",
    "# # 去除MA列\n",
    "# test3 = test2.drop('MA',axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e8124bb5",
   "metadata": {},
   "source": [
    "#### 4.标准化处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "3e1c6daa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 6.26885216, -0.15951884, -0.15951884, ..., -0.93846011,\n",
       "        -1.74350711, -0.18432414],\n",
       "       [ 6.26885216, -0.15951884, -0.15951884, ..., -1.01051481,\n",
       "        -1.71231662, -0.36372625],\n",
       "       [ 6.26885216, -0.15951884, -0.15951884, ..., -1.09681236,\n",
       "        -1.80050724, -0.30510505],\n",
       "       ...,\n",
       "       [-0.15951884, -0.15951884, -0.15951884, ..., -0.19968667,\n",
       "         0.46581213, -1.11407397],\n",
       "       [-0.15951884, -0.15951884, -0.15951884, ..., -0.04010067,\n",
       "         0.47609325, -1.14189356],\n",
       "       [-0.15951884, -0.15951884, -0.15951884, ...,  0.01940709,\n",
       "         0.55472064, -1.16890632]])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "import numpy as np\n",
    "# 创建StandardScaler对象\n",
    "scaler = StandardScaler()\n",
    "# 对数据进行标准化处理\n",
    "train1 = scaler.fit_transform(train)\n",
    "train1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "0e0192dd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.16259392, -0.15892868, -0.16259392, ...,  2.05110099,\n",
       "         0.27716307,  0.10036909],\n",
       "       [-0.16259392, -0.15892868, -0.16259392, ...,  1.60871603,\n",
       "        -1.33826122, -1.3119887 ],\n",
       "       [-0.16259392, -0.15892868, -0.16259392, ...,  2.14250478,\n",
       "        -1.64155313, -1.19587641],\n",
       "       ...,\n",
       "       [-0.16259392, -0.15892868, -0.16259392, ...,  1.18577773,\n",
       "        -0.64847373, -0.28005199],\n",
       "       [-0.16259392, -0.15892868, -0.16259392, ..., -0.65625711,\n",
       "        -1.7170654 , -0.08587364],\n",
       "       [-0.16259392, -0.15892868, -0.16259392, ...,  0.73657275,\n",
       "         0.39608821, -1.408013  ]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 创建StandardScaler对象\n",
    "scaler = StandardScaler()\n",
    "# 对数据进行标准化处理\n",
    "test4 = scaler.fit_transform(test1)\n",
    "test4"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6f4c4719",
   "metadata": {},
   "source": [
    "#### 5.转换数据格式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "d275f3b1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[ 6.2689, -0.1595, -0.1595,  ..., -0.9385, -1.7435, -0.1843],\n",
      "        [ 6.2689, -0.1595, -0.1595,  ..., -1.0105, -1.7123, -0.3637],\n",
      "        [ 6.2689, -0.1595, -0.1595,  ..., -1.0968, -1.8005, -0.3051],\n",
      "        ...,\n",
      "        [-0.1595, -0.1595, -0.1595,  ..., -0.1997,  0.4658, -1.1141],\n",
      "        [-0.1595, -0.1595, -0.1595,  ..., -0.0401,  0.4761, -1.1419],\n",
      "        [-0.1595, -0.1595, -0.1595,  ...,  0.0194,  0.5547, -1.1689]],\n",
      "       dtype=torch.float64)\n",
      "tensor([20.7049, 21.2929, 21.1667,  ..., 12.6134, 12.4772, 11.8117],\n",
      "       dtype=torch.float64)\n"
     ]
    }
   ],
   "source": [
    "X,y = torch.tensor(train1),torch.tensor(target)\n",
    "test4 = torch.tensor(test4)\n",
    "print(X,y,sep='\\n')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "18937c3f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(torch.Size([2160, 93]),\n",
       " torch.Size([540, 93]),\n",
       " torch.Size([2160]),\n",
       " torch.Size([540]))"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 切割数据样本 20%验证集；80%训练集\n",
    "X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)\n",
    "#检查训练集和验证集中样本的形态\n",
    "X_train.shape,X_test.shape,y_train.shape,y_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "c739f672",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_1620\\4065902641.py:2: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
      "  X_train = torch.tensor(X_train,dtype=torch.float32)\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_1620\\4065902641.py:3: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
      "  y_train = torch.tensor(y_train,dtype=torch.float32)\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_1620\\4065902641.py:4: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
      "  X_test = torch.tensor(X_test,dtype=torch.float32)\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_1620\\4065902641.py:5: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
      "  y_test = torch.tensor(y_test,dtype=torch.float32)\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_1620\\4065902641.py:7: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
      "  test4 = torch.tensor(test4, dtype=torch.float32)\n"
     ]
    }
   ],
   "source": [
    "# 将样本数据转换为 PyTorch 的张量类型\n",
    "X_train = torch.tensor(X_train,dtype=torch.float32)\n",
    "y_train = torch.tensor(y_train,dtype=torch.float32)\n",
    "X_test = torch.tensor(X_test,dtype=torch.float32)\n",
    "y_test = torch.tensor(y_test,dtype=torch.float32)\n",
    "# 将测试数据转换为 PyTorch 的张量类型\n",
    "test4 = torch.tensor(test4, dtype=torch.float32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "6505c6f1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(torch.Size([2160, 1, 93]),\n",
       " torch.Size([540, 1, 93]),\n",
       " torch.Size([2160, 1, 1]),\n",
       " torch.Size([540, 1, 1]),\n",
       " torch.Size([893, 1, 93]))"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 转换样本数据形状为RNN所需的维度\n",
    "X_train = X_train.reshape(X_train.shape[0], 1, X_train.shape[1])\n",
    "y_train = y_train.reshape(y_train.shape[0], 1, 1)\n",
    "X_test = X_test.reshape(X_test.shape[0], 1, X_test.shape[1])\n",
    "y_test = y_test.reshape(y_test.shape[0], 1, 1)\n",
    "# 转换测试数据形状为RNN所需的维度\n",
    "test4 = test4.reshape(test4.shape[0], 1, test4.shape[1])\n",
    "# 查看维度信息\n",
    "X_train.shape,X_test.shape,y_train.shape,y_test.shape,test4.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "9962b700",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([2160, 1, 93])\n",
      "torch.Size([2160, 1, 1])\n"
     ]
    }
   ],
   "source": [
    "print(X_train.shape)\n",
    "print(y_train.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "043877a7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([893, 1, 93])\n"
     ]
    }
   ],
   "source": [
    "print(test4.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f0394248",
   "metadata": {},
   "source": [
    "#### 6.构建RNN模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "bffbdbee",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 构建循环神经网络\n",
    "class RNN(nn.Module):\n",
    "    def __init__(self, input_size):\n",
    "        super(RNN, self).__init__()\n",
    "        # 定义RNN层，输入维度为input_size，隐藏状态维度为64\n",
    "        self.rnn = nn.RNN(input_size, 64, batch_first=True)\n",
    "        # 定义RNN层，输入维度为input_size，隐藏状态维度为64\n",
    "        self.fc = nn.Linear(64, 1)\n",
    "        \n",
    "    def forward(self, x):\n",
    "        # 将输入数据x经过RNN层得到所有时间步的输出结果out\n",
    "        out, _ = self.rnn(x)\n",
    "        # 取最后一个时间步的输出，并通过全连接层得到模型的输出\n",
    "        out = self.fc(out[:, -1, :])\n",
    "        return out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "cdcf7916",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置输入特征的维度\n",
    "input_size = X_train.shape[2]\n",
    "# 设置学习率\n",
    "lr = 0.001\n",
    "# 设置迭代次数\n",
    "num_epochs = 10001"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "8e063a0b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 初始化模型、损失函数和优化器\n",
    "model = RNN(input_size)\n",
    "# 定义损失函数\n",
    "criterion = nn.MSELoss()\n",
    "# 设置优化器\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "8dad1c4d",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch [100/10001], Loss: 195.7904\n",
      "Epoch [200/10001], Loss: 86.8503\n",
      "Epoch [300/10001], Loss: 40.0655\n",
      "Epoch [400/10001], Loss: 22.6196\n",
      "Epoch [500/10001], Loss: 14.0872\n",
      "Epoch [600/10001], Loss: 9.1695\n",
      "Epoch [700/10001], Loss: 6.7455\n",
      "Epoch [800/10001], Loss: 4.9066\n",
      "Epoch [900/10001], Loss: 3.4005\n",
      "Epoch [1000/10001], Loss: 2.4616\n",
      "Epoch [1100/10001], Loss: 1.9555\n",
      "Epoch [1200/10001], Loss: 1.6789\n",
      "Epoch [1300/10001], Loss: 1.4544\n",
      "Epoch [1400/10001], Loss: 1.2809\n",
      "Epoch [1500/10001], Loss: 1.1421\n",
      "Epoch [1600/10001], Loss: 0.9866\n",
      "Epoch [1700/10001], Loss: 0.8581\n",
      "Epoch [1800/10001], Loss: 0.7601\n",
      "Epoch [1900/10001], Loss: 0.6919\n",
      "Epoch [2000/10001], Loss: 0.6376\n",
      "Epoch [2100/10001], Loss: 0.5938\n",
      "Epoch [2200/10001], Loss: 0.5567\n",
      "Epoch [2300/10001], Loss: 0.5239\n",
      "Epoch [2400/10001], Loss: 0.4944\n",
      "Epoch [2500/10001], Loss: 0.4667\n",
      "Epoch [2600/10001], Loss: 0.4418\n",
      "Epoch [2700/10001], Loss: 0.4191\n",
      "Epoch [2800/10001], Loss: 0.3980\n",
      "Epoch [2900/10001], Loss: 0.3786\n",
      "Epoch [3000/10001], Loss: 0.3604\n",
      "Epoch [3100/10001], Loss: 0.3424\n",
      "Epoch [3200/10001], Loss: 0.3217\n",
      "Epoch [3300/10001], Loss: 0.3064\n",
      "Epoch [3400/10001], Loss: 0.2926\n",
      "Epoch [3500/10001], Loss: 0.2797\n",
      "Epoch [3600/10001], Loss: 0.2676\n",
      "Epoch [3700/10001], Loss: 0.2559\n",
      "Epoch [3800/10001], Loss: 0.2448\n",
      "Epoch [3900/10001], Loss: 0.2341\n",
      "Epoch [4000/10001], Loss: 0.2239\n",
      "Epoch [4100/10001], Loss: 0.2141\n",
      "Epoch [4200/10001], Loss: 0.2047\n",
      "Epoch [4300/10001], Loss: 0.1957\n",
      "Epoch [4400/10001], Loss: 0.1870\n",
      "Epoch [4500/10001], Loss: 0.1785\n",
      "Epoch [4600/10001], Loss: 0.1702\n",
      "Epoch [4700/10001], Loss: 0.1622\n",
      "Epoch [4800/10001], Loss: 0.1543\n",
      "Epoch [4900/10001], Loss: 0.1466\n",
      "Epoch [5000/10001], Loss: 0.1391\n",
      "Epoch [5100/10001], Loss: 0.1319\n",
      "Epoch [5200/10001], Loss: 0.1249\n",
      "Epoch [5300/10001], Loss: 0.1181\n",
      "Epoch [5400/10001], Loss: 0.1115\n",
      "Epoch [5500/10001], Loss: 0.1052\n",
      "Epoch [5600/10001], Loss: 0.0993\n",
      "Epoch [5700/10001], Loss: 0.0936\n",
      "Epoch [5800/10001], Loss: 0.0882\n",
      "Epoch [5900/10001], Loss: 0.0831\n",
      "Epoch [6000/10001], Loss: 0.0783\n",
      "Epoch [6100/10001], Loss: 0.0737\n",
      "Epoch [6200/10001], Loss: 0.0695\n",
      "Epoch [6300/10001], Loss: 0.0654\n",
      "Epoch [6400/10001], Loss: 0.0616\n",
      "Epoch [6500/10001], Loss: 0.0581\n",
      "Epoch [6600/10001], Loss: 0.0547\n",
      "Epoch [6700/10001], Loss: 0.0515\n",
      "Epoch [6800/10001], Loss: 0.0486\n",
      "Epoch [6900/10001], Loss: 0.0459\n",
      "Epoch [7000/10001], Loss: 0.0433\n",
      "Epoch [7100/10001], Loss: 0.0409\n",
      "Epoch [7200/10001], Loss: 0.0386\n",
      "Epoch [7300/10001], Loss: 0.0374\n",
      "Epoch [7400/10001], Loss: 0.0345\n",
      "Epoch [7500/10001], Loss: 0.0326\n",
      "Epoch [7600/10001], Loss: 0.0308\n",
      "Epoch [7700/10001], Loss: 0.0291\n",
      "Epoch [7800/10001], Loss: 0.0276\n",
      "Epoch [7900/10001], Loss: 0.0261\n",
      "Epoch [8000/10001], Loss: 0.0247\n",
      "Epoch [8100/10001], Loss: 0.0234\n",
      "Epoch [8200/10001], Loss: 0.0221\n",
      "Epoch [8300/10001], Loss: 0.0210\n",
      "Epoch [8400/10001], Loss: 0.0199\n",
      "Epoch [8500/10001], Loss: 0.0189\n",
      "Epoch [8600/10001], Loss: 0.0180\n",
      "Epoch [8700/10001], Loss: 0.0172\n",
      "Epoch [8800/10001], Loss: 0.0169\n",
      "Epoch [8900/10001], Loss: 0.0156\n",
      "Epoch [9000/10001], Loss: 0.0149\n",
      "Epoch [9100/10001], Loss: 0.0143\n",
      "Epoch [9200/10001], Loss: 0.0137\n",
      "Epoch [9300/10001], Loss: 0.0131\n",
      "Epoch [9400/10001], Loss: 0.0126\n",
      "Epoch [9500/10001], Loss: 0.0120\n",
      "Epoch [9600/10001], Loss: 0.0115\n",
      "Epoch [9700/10001], Loss: 0.0110\n",
      "Epoch [9800/10001], Loss: 0.0106\n",
      "Epoch [9900/10001], Loss: 0.0104\n",
      "Epoch [10000/10001], Loss: 0.0098\n"
     ]
    }
   ],
   "source": [
    "# 定义存储损失的列表\n",
    "train_losses = []\n",
    "train_epochs = []\n",
    "\n",
    "# 模型训练\n",
    "for epoch in range(num_epochs):\n",
    "    inputs = torch.Tensor(X_train)  # 将输入数据转换为torch.Tensor类型\n",
    "    labels = torch.Tensor(y_train)  # 将标签数据转换为torch.Tensor类型\n",
    "    \n",
    "    optimizer.zero_grad()  # 清空优化器的梯度信息，准备进行反向传播和参数更新\n",
    "    \n",
    "    outputs = model(inputs)  # 输入数据经过模型得到输出结果\n",
    "    loss = criterion(outputs.squeeze(), labels.squeeze())  # 计算损失值\n",
    "    \n",
    "    loss.backward()  # 反向传播，计算参数的梯度\n",
    "    optimizer.step()  # 使用优化器更新模型的参数\n",
    "    \n",
    "    if (epoch+1) % 100 == 0:\n",
    "        train_losses.append(loss.item())  # 将当前的损失值添加到train_losses列表中\n",
    "        train_epochs.append(epoch+1)  # 将当前的训练轮次添加到train_epochs列表中\n",
    "        print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')  # 打印当前轮次的损失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "e2de4836",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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+533dT5/GskkXey4446VzKqZvQe1trby8ssvs3p1V8s8WLn6+nrGjBlDTU1Nz4lTFQsAkrYimRjrEySzJg5JDzWQND2928W+dUTEDNJFNiZMmOAhy2YZ8/LLLzNs2DDGjh1L90sqW0SwbNkyXn75ZXbeeeden1epTuBakiX0vhQRi0kmyTosPbwfSY2gq31mZh1Wr17N1ltv7Yd/DySx9dZbb3RNqVI1gLNJmnQulnQxcD1wuqTtgKNJpq4NYG6nfX2urb3I6++0MHxIDQ11A+atVzNLDeSHf0tLC3V1dT0n7AOb8nuqSA0gIq6JiJERMSn9zCJZfOMh4PCIeDsilnfeV4m8LFm+mkMvf4BfPvlaJS5vZhnw/e9/nxUrVmwwzdKlS7nwwgs7vi9btoypU6eul+6FF17g9NNPB+CGG25g7733ZtKkSUyaNGm99M8//zzFYpGbbrqJK664YrPL0VnVpoKIiDcj4taIWLKhfX2ttpAUsaWtvYeUZmZd22OPPTjuuONYsWIFV111FXPmzGH27NksX76cz3/+8yxdupTrr7+egw46iMcee4xTTjmFT33qUyxbtowzzzyTU089leeee44FCxZw22238ac//Ylf//rX1NTUcM4553Dddddx3XXXkc/nO+5ZLBY57bTTWLFiBblcriI1iUHfJlJXSH6hLW0bnPLdzKxbRxxxBMOHD6euro5isUh7ezt33HEH73//+ykUCrS2tvL4448zffp0jjvuOO6//35OPPFE7rjjDhoaGjqu88c//pHGxkaGDBnCiBEj2Hbbbbn77rv5+c9/DsCpp57akfamm27irbfe4pOf/CSvvfYa7e3t3HnnnbS2tnL88cczffr0zS5XBgJAUgNY0+4AYDaQff2up/nDq8v79Jp7bTecfzl27w2mmTFjBnfddRdHHnkkH/rQhzr2l7e5//SnP2XZsmWccMIJHH/88UycOJHXX3+dD3/4w1x++eUcffTRAOy6667k83nmzJnDzjvvzPnnn8/LL7/ccZ1bbrmFKVOmkM/nueOOO3jssccYOnQoM2bMoL6+njPOOKNPyz/oA0BtPg0ArgGY2SaYNm0ae+21F7NnzwZg1apVFArrPjrPOOMMPvaxj3HZZZcxffp0Xn31VY477jgefPBBampqaGtro1Ao8Oyzz3Lttddy3333cffdd7NkyRLmzJnDjBkzOOusszj22GOpqalh/vz5LF26lE984hMALFq0iLq6Om6++WYAVq5cyZVXXsn48eM3q2yDPgDkcqKQkwOA2QDX01/qlZbLJX9MLlq0qOPBXCKJb3/721xwwQU89dRTPPXUU8yfP58XX3yRYcOGMWzYMG677TZeeeUVdtttN4466ijOOOMMZs2aBcDVV1/NtGnTgKTt/4ADDmDu3LlAMhju0EMPpVAocOONN9LY2OXEnptk0AcASDqCHQDMbHO8/fbbPPDAAzz33HOMG7fu1GULFy5k4cKF/OQnP+GII45g5syZ3HHHHbz77ruMGDGCmpoaGhoaOOKII9h11135/e9/D8D48eNZvHgxO+64I2vWrGHixIkUi2ufVa2trXzmM5/hggsuYNddd+XYY4/lmmuuYf/99++TMmViQZjaQs6dwGa2yVpaWrj++ut55JFH2HvvpCbS2toKJKNwd9hhBy677DIaGhq49957Oeuss9hzzz0pFotsv/323HDDDSxYsIBiscg777zTUZu48MIL+dznPsd5553Hxz/+cfL5PPl8nra2Nu666y4mTpzIUUcdxSmnnMKBBx7I9ddfz/Tp05k8eTILFizY7HJlIgDUuQZgZpvhjTfe4PLLL2fRokVcfPHFAHzve99jxx13pFgsMm/ePO655x5OP/10Dj74YM4991yWLFnCDTfcwC677MIVV1zBM888Q3NzM+eddx4nnXQSN9xwAyeffDJf/epXmTx5Mvfccw9Dhw5l1qxZLF++nPvvv5+bb76Zs846qyMfe+65J/PmzeOCCy5gt9122+xyKWJgTLEzYcKE2NQFYSZ+6wEm7LQVV5w0vm8zZWYV9cwzz7Dnnnv2dzY2yYoVK8jn89TX13d5PCL6fJRzV78vSY9GxISu0mejDyDvGoCZVdfQoUM3ePy9MMVFJpqAagt59wGYDVADpZWiv23K7ykjASDngWBmA1B9fT3Lli1zEOhBaTro7pqbupOJJqC6fI41ngvIbMAZM2YML7/8Ms3Nzf2dlfe80oIwGyMTAaC2kGPFmrb+zoaZbaSampqNWuDENk4mmoD8GqiZ2foyEQA8EtjMbH3ZCQDuBDYzW0fFAoCkUZLmptvnSJqTfp6Q9CNJBUkvle3fp1J58TgAM7P1VaQTWNJIYBYwFJIlIoFr0mNXpcf2BW6JiH+uRB7KuQnIzGx9laoBtAMnAeus3iBpe2BURDSRLAJ/jKSHJc2UVLE3kjwZnJnZ+iq1KPzybhZ5P5e0JgA8AhwZEQcCNcCUSuQFXAMwM+tK1TqBJeWAw4E56a4nI+K1dLsJGNfFOdMkNUlq2pyBIHWFPGvaix5NaGZWpppvAU0Efh9rn8I3StpPUh6YCszvfEJEzIiICRExYXNWwfG6wGZm66vmSOCPAr8p+34JcDMg4M6IuL9SNy5fF7iukK/UbczMBpSKBoCImFS2/eVOx54ieROo4moLXhjezKyzzAwEAzcBmZmVy0YASJuAWlodAMzMSjIRAOpqXAMwM+ssEwGgvBPYzMwS2QgAaR+ARwObma2VqQDgGoCZ2VqZCAAeCGZmtr5MBIDafDL4q6XV6wKbmZVkIwC4BmBmtp5MBIA69wGYma0nEwHAncBmZuvLVgBwE5CZWYdsBQDXAMzMOmQjAOQ9EMzMrDMHADOzjMpEAMjlRG3e6wKbmZXLRAAALwxvZtZZtgJAu0cCm5mVVCwASBolaW66XZD0kqQ56WefdP9MSQ9K+kql8lHiJiAzs3VVJABIGgnMAoamu/YFbomISelngaQTgHxEHALsImlcJfJS4iYgM7N1VaoG0A6cBCxPvx8MHCPp4fSv/gIwCbg1PT4bOKxCeQFKTUAOAGZmJRUJABGxPCLeLtv1CHBkRBwI1ABTSGoHr6TH/wKM6nwdSdMkNUlqam5u3qw81eZzXhPYzKxMtTqBn4yI19LtJmAc8C4wJN3X0FVeImJGREyIiAmNjY2blYG6GtcAzMzKVSsA3ChpP0l5YCowH3iUtc0++wEvVjIDtfmcB4KZmZUpVOk+lwA3AwLujIj7JQ0H5kraDjiapJ+gYmoLOd5Z3VbJW5iZDSgVDQARMSn9+RTJm0Dlx5ZLmgQcBXyrU59Bn6sr5FjmGoCZWYdq1QC6FBFvsvZNoIryW0BmZuvKzkjgfI6WNo8ENjMryU4A8EAwM7N1ZCYA1BXyDgBmZmUyEwBcAzAzW1e2AoA7gc3MOmQnAORztLYHxWL0d1bMzN4TshMASgvDuxZgZgZkKADUFbwusJlZucwFAHcEm5klMhMA3ARkZrau7AUA1wDMzIAsBYB8HnAAMDMryU4AcA3AzGwdmQsAnhDOzCyRnQCQdw3AzKxcZgJAXU1aA/BbQGZmQAUDgKRRkuam2yMk3SNptqTbJNVKKkh6SdKc9LNPpfICrgGYmXVWkQAgaSQwCxia7vo08N2ImAwsAT5GskTkLRExKf0sqEReSjwQzMxsXZWqAbQDJwHLASLiBxFxX3qsEXidZBH4YyQ9LGmmpIouT+m3gMzM1lWRABARy7ta5F3SIcDIiHgIeAQ4MiIOBGqAKV2knyapSVJTc3PzZuXJI4HNzNZVtU5gSVsBVwF/m+56MiJeS7ebgHGdz4mIGRExISImNDY2btb9S30ALa1+DdTMDKoUACTVAj8DvhQRi9PdN0raT1IemArMr2QeXAMwM1tXtWoAZwMfBC5O3/g5CbgEuBF4AngwIu6vZAbqCp4KwsysXEU7XiNiUvrzGuCaLpLsW8n7l6vJC3AAMDMrycxAMEnUFnIeCGZmlspMAACoy+dcAzAzS2UqANQWcl4S0swslbkA4BqAmVkiUwGgzgHAzKxDpgKAawBmZmtlLwD4LSAzMyBrAcBvAZmZdchWAHATkJlZhw0GAEk5SUM3cOxTlclWZdQW8l4T2Mws1dNUEGOBEyU9AozsdEzA6cCtFchXRdTmPQ7AzKykpwDQRrK4y1eBucAo4K+Ax4Dngaho7vpYXY07gc3MSroNAOkKXZcCw4D3AXeTzNm/O/Aw8FvggCrksc94Kggzs7V66gSeC6zplC46/Rww3AlsZrZWtzWAiGiTNBsYQbKO71XAEJLawPuAU0nW9h0wPA7AzGytnvoAdgSeiIhvdz4gKUfSLDRg1OZztLQ6AJiZwYb7AOqALwOrJX2kiyQ54JVKZawSXAMwM1trQ01ALcDRknYBLiNZvesfgGVpEgF13Z0vaRTw84iYmH6fCewF3B0Rl3a3r5LqCnnai0F7McjnVOnbmZm9p/W4JGRELAJOlnQi8FJEPNvTOZJGArOAoen3E4B8RBwi6ceSxgH7dN4XEc9vVml60LEwfFuRIbX5St7KzOw9r9dTQUTEz4Ha0ndJe6fNRF1pB04ClqffJ7F2wNhs4LBu9lVUeQAwM8u6XgUASV9IN68s2/0d4K+7Sh8RyyPi7bJdQ1nbX/AXkgFlXe3rfN9pkpokNTU3N/cmqxtUCgAt7Z4OwsystzWA49OfqwAkjQcaImJ2L89/l+QVUoCG9L5d7VtHRMyIiAkRMaGxsbGXt+peXd41ADOzkt4GgNb0Z0jaGrgGOHsj7vMoa5t49gNe7GZfRXXUABwAzMw23Aks6XySkcBjJJ0GjAHuBP4+IhZuxH1uB+ZK2g44GjiYZCRx530V5T4AM7O1eqoBNANvAkWS5po6oAbYtTcXj4hJ6c/lJJ2+DwGHR8TbXe3b+OxvnDoHADOzDhsMABFxM/AL4NWIuBZYBBwKfFzSGRtzo4h4MyJujYglG9pXSR01AA8GMzPrcUGY3YD7gZ0lDQEiItqAM4FzJI2teA77UK07gc3MOvRUA3gBOAT4BvAT0oFdEdFKMjr4/EpnsC+5D8DMbK3ejAQO4D8k3Qnsnq4TkAPuAfaocP76lN8CMjNbq6e3gG4jWRXsZuBrwGvpobkko31XVDR3fayuIwB4IJiZWU81gC2BzwInkrwNdGxEtEuqAe6MiKMrnL8+VZtP5v9xE5CZWc+vgQbrrvx1lqT5wH+RTAUxoNTV+C0gM7OSnmoA2wIfK32JiOuA6yTtCFwraWVE/K6SGexLfgvIzGytngLA/yMZCfwb4APpEpECngDOAG4Bulos5j2pVANwJ7CZWQ8BICJmSTqcZBro84EpEfEfpeOSZlU4f31qSE2efE68s7q158RmZoNcT28B/QQYSzIL6KvAkWXLQxaB/6xo7vqYJIbXF3h7lQOAmVlPTUBfJ5kKuhmYQ7Ic5AskYwCGA98D7qtc9vreiCE1LF/V1t/ZMDPrdz01Af1R0q+AlRGxWNK1wPbptoBTqpLLPjR8SI1rAGZm9G4k8FNl2wuBhel2AK9XLmuVMcIBwMwM2Ig1gQeL4UNqWO5OYDOzDAaA+hqWuwZgZpa9AFBqAkpasMzMsqvHPoC+Iukc4KT065YkawIfRbLIDCTLTC6odD5GDKmhtT1Y3VpkSG2+0rczM3vPqloAiIhrSBaTR9JVwI3AGxHxz9XKA8DwIUmR317V6gBgZplW9SYgSdsDo4AJwDGSHpY0M11noOJGDKkB8JtAZpZ5/dEHcC5JTeAR4MiIOJBkofkp1bh5KQD4TSAzy7qqBgBJOeBwklHFT0ZEaYGZJmBcF+mnSWqS1NTc3NwneRhen9YAVjoAmFm2VbsGMBH4fTqI7EZJ+0nKA1OB+Z0TR8SMiJgQERMaGxv7JANuAjIzS1StEzj1UZKppQEuIVlqUiSri91fjQy4CcjMLFHVABARXy7bfgrYt5r3BxhWv/YtIDOzLMvcQLBCPkdDXcEzgppZ5mUuAIAnhDMzg4wGgGFeFMbMLJsBYIRnBDUzy3AAcA3AzDIukwHAq4KZmWU0ALgGYGaW4QCwYk07re3F/s6KmVm/yWQAGJ4OBnMtwMyyLJMBYMQWpekgPBjMzLIrmwHAE8KZmWUzAHRMCe0AYGYZlskA0DEjqAOAmWVYpgOAawBmlmWZDADDHQDMzLIZAOpr8tQWcp4PyMwyLZMBADwa2MwsswFguKeENrOMq1oAkFSQ9JKkOelnH0kzJT0o6SvVykdJUgPwQDAzy65q1gD2BW6JiEkRMQkYB+Qj4hBgF0njqpgXrwpmZplXzUXhDwaOkXQ4sABoAW5Nj80GDgOer1Zmhg+p4Y/NK6p1OzOz95xq1gAeAY6MiAOBGuBo4JX02F+AUZ1PkDRNUpOkpubm5j7NjFcFM7Osq2YAeDIiXku3m4BtgCHp94au8hIRMyJiQkRMaGxs7NPMlN4CKhajT69rZjZQVDMA3ChpP0l5YCpwLkmzD8B+wItVzAsjhtRQDHh3jTuCzSybqtkHcAlwMyDgTuB2YK6k7Uiagw6uYl46JoRbvqq1Y9vMLEuqFgAi4imSN4E6SJoEHAV8KyLerlZeYN3pIMaMrOadzczeG6pZA1hPRLzJ2jeBqsoTwplZ1mV3JPCQ0rKQ7gMws2zKbADwmgBmlnWZDwBuAjKzrMpsABhaWyAneGvVmv7OiplZv8hsAMjlxPYjh7B42cr+zoqZWb/IbAAA2H3UcBYueae/s2Fm1i+yHQBGN7DojRW0tLX3d1bMzKou4wFgOO3FYJFnBTWzDMp0ANhj9DAANwOZWSZlOgDsvM1QavLiWQcAM8ugTAeAmnyOXRsbWLhkeX9nxcys6jIdAAB2Hz2M55a+29/ZMDOruswHgPePGsYrb63y6mBmljmZDwCljuDn3A9gZhmT+QCwe+lNoKUOAGaWLZkPANtvOYSGuoJfBTWzzKnagjCSRgA/BfLACuAk4AVgUZrk7yNiQbXyU5Yv3j+qwa+CmlnmVLMG8GnguxExGVgCXATcEhGT0k/VH/4lu49O5gSKiP7KgplZ1VUtAETEDyLivvRrI9AGHCPpYUkzJfXb8pS7j2rg7VWtvP5OS39lwcys6qreByDpEGAkcB9wZEQcCNQAU7pIO01Sk6Sm5ubmiuVp99HDAdwMZGaZUtUAIGkr4Crgb4EnI+K19FATMK5z+oiYERETImJCY2NjxfLV8SaQRwSbWYZULQBIqgV+BnwpIhYDN0raT1IemArMr1ZeOttqaC2jh9fz2OK3+isLZmZVV80awNnAB4GLJc0BngZuBJ4AHoyI+6uYl/VM3nsUDyx83SOCzSwzqtkJfE1EjCx76+frEbFvROwTERdXKx/dmbr/9qxpK/Krp5b0d1bMzKoi8wPBSvbfYUt22noL7njilf7OiplZVTgApCRx3Pjt+d0fl7Hk7dX9nR0zs4pzACgzdfx2RMBd81/t76yYmVWcA0CZXRob2HfMCG53M5CZZYADQCdTx2/P068u53nPDmpmg5wDQCfH7Pc+coL/fty1ADMb3BwAOtl2WD2T9xrNrN+9yCtvrerv7JiZVYwDQBe+csyeRMC/3vl0f2fFzKxiHAC6MGbkFpx/5Dju+8NSZj/tgWFmNjg5AHTj7MN2ZvdRw/jXO59mRUtbf2fHzKzPOQB0oyaf47ITPsCrb6/m0rv/QLHoxWLMbHBxANiAA3bair/7q1245eE/c/asR3h7lSeKM7PBwwGgBxcdvQeXTv0A8154g+OunufF481s0HAA6IEkTjt4J2753MGsWNPOsVfN49v3LmTVmvb+zpqZ2WZxAOilCWO34pfnTeSYfd/H1f/zAkd+93+5Z8FrXkjezAYsB4CN0Disju+eNJ7/nHYwQ+vynHPTY0y5ch6/euo1dxKb2YCjgfIX7IQJE6Kpqam/s9Ghrb3IHU+8ytX/8wJ/emMFuzQOZcoH3sfkvUexz/YjkNTfWTQzQ9KjETGhy2P9HQAkzQT2Au6OiEu7S/deCwAlbe1F7nryVW55+M80vfgXigHbNNSyx+jh7LZtA7tu28C2w+rYpqGOxoY6Rg6toaGu4ABhZlWxoQBQqHZmykk6AchHxCGSfixpXEQ835952liFfI7j9x/D8fuP4c0Va3jg2dd5cNEynl/6Drc2/ZmVXXQWF3Jiyy1qGV5foKG+QENdgS1qCwytyyc/a/MMrUv31+XZojbPkJo89TV56gp56mty1ORz1BaSn4WcKORFIZds5/OikBM5iXxO5CVyOQccM1tXvwYAYBJwa7o9GzgMGFABoNzIobV84oAxfOKAMQAUi0Hzuy00v5N+3m3hrZVreGtlK2+ubOWd1a2829LGO6vb+MuKlaxqbWdFSxsrWtpZ1dr3bxmtDQaQk9IP5NL9ksinx0TyBlR52mRferzjZ7I/lwORXE9lx3NK9qf/Q+n38uuQ3mvt8XW/k6bvfH7HuetcPzmPLq5FWfq15657nbX5Kf3WepE2vUfHGd2kWe94WV7LE5WfV35uqezrnNJFus4Hurp36T49Xae7iuqm1GC7u3d3abq9zkbeq7e6y1Ovzq3w31ejR9RzzL7b9fl1+zsADAVK8y7/Bfhg+UFJ04BpADvuuGN1c9YHcjkxang9o4bXb/S57cVgxZo2Vq1pZ+WadlauaWN1a5GWtnZaWousaS/Smn7a2oO2YvppL9JeDNrT78Vi0B5rf7YXoRhBdN5Ov0NQLEJ7BBF0HIsopYVI0xQjCJI0xTRtpHkHiEi2g9J5EEUIimuvl6aL9IS130v3p+MedD6W/q5K96WLfeXpS+fT+byydOVpYp300Wl/rJem/Hqd81K2e737db4n5XmkvNzr6uq6nctog8NBO281KAPAu8CQdLuBTm8lRcQMYAYkfQDVzVr/yufE8PoahtfX9HdWbJBYJ2CsE2S6SdPtdcrP7d0/y94EpV6l6cX9NiUAbs7DpRr9qPkKNeH2dwB4lKTZ5yFgP2Bh/2bHbPDqqpmqi1RVyYu9N/R3ALgdmCtpO+Bo4OD+zY6ZWXb060CwiFhO0hH8EHB4RLzdn/kxM8uS/q4BEBFvsvZNIDMzqxJPBWFmllEOAGZmGeUAYGaWUQ4AZmYZ1e+TwfWWpGZg8Uaetg3wRgWy816WxTJDNsudxTJDNsu9OWXeKSIauzowYALAppDU1N0seINVFssM2Sx3FssM2Sx3pcrsJiAzs4xyADAzy6jBHgBm9HcG+kEWywzZLHcWywzZLHdFyjyo+wDMzKx7g70GYGZm3XAAMDPLqEEZACTNlPSgpK/0d176iqQRku6RNFvSbZJquypnb/cNNJJGSXo83c5EuSX9QNKx6fagL7OkkZJ+KalJ0o/SfYO23Ol/03PLvm9yWTe1/IMuAJQvNA/sImlcf+epj3wa+G5ETAaWACfTqZxdlX0Q/T6+DQzpbRkHerklTQRGR8RdWSkzcDpwU/q++zBJ/8QgLbekkcAskmVxu3xuVeP/90EXAOh6ofkBLyJ+EBH3pV8bgdNYv5yTerlvQJH0EWAFSeCbxCAvt6Qa4FrgRUnHkYEyp5YBH5C0JbADsDODt9ztwEnA8vT7JDa9rF3t65XBGAA6LzQ/qh/z0uckHQKMBP7M+uXsquwD+vchqRb4KnBRuqu3ZRzI5T4D+APwLeBA4FwGf5kB5gE7AecBzwC1DNJyR8TyTgtgbc5/15tc/sEYADa40PxAJmkr4Crgb+m6nL3dN5BcBPwgIt5Kv2eh3PsDMyJiCfAfwG8Y/GUG+Bfg8xFxCfAscCrZKDds3n/Xm1z+gfiL6klpoXlIFpp/sf+y0nfSv4R/BnwpIhbTdTl7u28gORI4V9IcYDxwLIO/3C8Au6TbE4CxDP4yQ1Kz3UdSHjgIuJxslBs279/zJpe/35eErIDbGZwLzZ8NfBC4WNLFwPXA6Z3KGaxf9q72DRgR8Vel7TQIfJzelXEgl3sm8GNJJwM1JG28dw7yMgP8X5L/rncCHgSuYPD/f11yO5te1k0u/6AcCZz2sB8F/CatRg9KXZWzt/sGsiyWO4tlhmyVe3PKuqnlH5QBwMzMejYY+wDMzKwXHADMzDLKAcAspVRX+zfyOqMlfbjvcmZWGQ4AllmSvimpRlJe0pUkrx5e2UXSb0iaImmopNslDZM0uew6DZL+tSz9GcAB3dzzEkmHS/qGpIvSa92bvvpoVlWD8TVQs94qACcCrwOfBA4FGiXtA/w2Ii5O030EuDQiVkoaC7QC35L0TET8OSLelbSDpM9GxHUkA5hWp3O0ALwZEcdLaiAZ+n8IsC0wmuSVxxUR0S4pBxARxWoU3swBwLLsyxHRIuki4EOsHXD1TZJpCJB0FPBqRKxMz2mLiNWSpgC7kkzJAcn0BT+S9BIwl2RU60pgN9ZOYzEC2BqYDjwB/C7d3k3Sb9K0U4GHK1Res3U4AFgmSTob+Kyk7wDHAJOBrYA6ktHHdZKmA98AFkk6iCRI7CDp5yQP9/kkD3siYgVwmqRvAl8HppFMXrcMuCm9bTtJkPkOsDtJDWBf4GKS0b9/FxF++FvVOABYJkXETEktQENEHAYgaRawPCL+Pv3+BeAekof19sBC4BHgnyPij52vKek6YHpaQ9iWpOnnrrIkBZLgcDrwXZKmpMtI+gvWAIsqUlizbrgT2AxI/8LfFmiWdFm6+1qSyfeIiP9Op+P+BfDRLs4/Ik23On1r6FCSkZnldgKuAT5D0kT0C+A4kgBwCPD7Pi6W2QY5AFjmpe38M0maYC4haZP/x4ho7SL5fwFnSsqVXg+VNJSkqehLaZqLgJuBeZK+XjoxIn5LMm/7r0lm+bwpvcdjJG3/j1SifGbdcROQZVL6xs2xJE079wOfiIiX0sOfBY4oJU0/AEREs6S7gH8HlkpamB66BSh00Yx0taTbgC9GxCLghySL23wFWCxpZ2BvoIVksr+mSpXZrDMHAMuqzwF/ImnmORc4VlIryeyb9cCWkgoks1LWlZ8YEf+Wvvd/JvBXEfEqgKRjgHsi4qdlaadLOoVkicORJE1Ai0hmbNyLZPbLfwSWAj+XdGpX/QtmleDJ4CyTJOX64317SYWIaEu3BeQior30PfwP0qrIAcDMLKPcCWxmllEOAGZmGeUAYGaWUQ4AZmYZ5QBgZpZR/x8WYHR6gpsIywAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制损失函数曲线图\n",
    "plt.plot(train_epochs, train_losses, label='训练损失')\n",
    "plt.xlabel('迭代次数')\n",
    "plt.ylabel('损失值')\n",
    "plt.title('训练损失曲线')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "id": "ac4a4308",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 模型预测\n",
    "test_inputs = torch.Tensor(X_test)\n",
    "predictions = model(test_inputs).squeeze().detach().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "id": "d75d69ce",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化分析\n",
    "plt.plot(y_test.squeeze(), label='Actual')\n",
    "plt.plot(predictions, label='Predicted')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 254,
   "id": "d1bf77d2",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 预测结果\n",
    "predictions = model(test4).squeeze().detach().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 255,
   "id": "3c92e093",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.47070799e+01, -4.50301838e+00, -3.27015281e+00,  1.20553160e+01,\n",
       "        3.27386558e-01,  2.22398033e+01,  2.04607086e+01, -4.88047075e+00,\n",
       "        9.42945385e+00,  1.35831156e+01,  7.49822330e+00,  1.79996910e+01,\n",
       "        2.17257385e+01,  4.90838051e+00,  1.88338814e+01,  1.26905375e+01,\n",
       "        2.16802254e+01,  1.44505858e+00,  2.30915985e+01,  8.76014054e-01,\n",
       "        4.64497423e+00,  2.05351448e+01,  7.61854410e+00,  1.34420338e+01,\n",
       "        1.25956087e+01,  2.52905312e+01,  1.84975357e+01,  1.63009281e+01,\n",
       "        1.82059360e+00,  2.18365059e+01,  6.91469967e-01,  3.33580017e-01,\n",
       "        2.21395836e+01,  3.90529346e+00,  1.02416391e+01,  3.62355232e+01,\n",
       "        6.35086870e+00, -1.14032984e-01,  7.52197313e+00,  7.88110590e+00,\n",
       "        1.32632227e+01, -1.05455008e+01,  4.42879105e+00,  2.76472549e+01,\n",
       "        5.68675220e-01,  7.05538702e+00,  1.20519705e+01, -5.66720366e-02,\n",
       "        5.96182489e+00,  1.70858116e+01,  1.18828440e+01,  1.18130846e+01,\n",
       "        1.05276432e+01,  9.82986259e+00,  8.87104321e+00,  2.39853020e+01,\n",
       "       -9.27276671e-01,  1.14602232e+01,  2.99272366e+01,  1.07257137e+01,\n",
       "        1.77373123e+01,  1.87396584e+01,  3.52453384e+01,  2.08371925e+01,\n",
       "        1.82530155e+01,  2.02427316e+00,  3.31009924e-01,  1.65030575e+01,\n",
       "        3.86567345e+01,  1.12445726e+01,  1.95792446e+01,  1.34528379e+01,\n",
       "        7.65206957e+00,  2.43738537e+01,  9.81227779e+00, -2.27409780e-01,\n",
       "        1.73621025e+01,  9.67630672e+00, -1.35210252e+00,  1.97576332e+00,\n",
       "        9.18169117e+00,  9.20433712e+00,  1.08645964e+01,  1.00244398e+01,\n",
       "        3.27463436e+00,  1.07777996e+01,  2.50060806e+01,  1.67972064e+00,\n",
       "       -6.83902073e+00,  8.17041016e+00,  2.26398811e+01,  2.48958282e+01,\n",
       "        1.77275333e+01, -1.70257664e+00,  9.46197987e+00,  8.19195652e+00,\n",
       "        6.00987256e-01,  1.64237900e+01,  7.36063957e+00,  1.34199343e+01,\n",
       "        7.38875926e-01,  1.13553743e+01,  9.20379353e+00,  1.09190073e+01,\n",
       "       -2.38785148e-02,  2.57398758e+01,  2.43714867e+01,  9.30043507e+00,\n",
       "        1.43538284e+01,  1.81383669e-01,  1.02311354e+01,  4.62326348e-01,\n",
       "        1.24264631e+01,  2.35391521e+01,  6.56439114e+00, -1.37954593e-01,\n",
       "        2.07056582e-01,  2.02086334e+01,  1.66282196e+01, -2.98151374e-02,\n",
       "        1.44582767e+01,  1.72322884e+01,  5.88733530e+00,  1.52872801e+01,\n",
       "        3.03393822e+01,  5.34101915e+00,  4.17287636e+00, -9.47278917e-01,\n",
       "        2.11547899e+00,  4.79013920e+00,  1.13091593e+01,  1.30252523e+01,\n",
       "        1.04789181e+01,  1.02587805e+01,  2.47367783e+01,  2.08966751e+01,\n",
       "        1.26951971e+01, -9.09340096e+00,  1.44046869e+01,  2.61872292e+01,\n",
       "        2.40567780e+01,  1.10585585e+01,  1.35998564e+01,  2.69488564e+01,\n",
       "        6.53315115e+00,  3.77520103e+01,  1.35591459e+00,  2.84117794e+00,\n",
       "        1.91626911e+01,  1.41674004e+01,  3.15742607e+01,  1.07351789e+01,\n",
       "        1.51672831e+01, -7.02799368e+00,  2.18776436e+01,  6.03532171e+00,\n",
       "        1.27380648e+01,  2.42661247e+01,  1.01288652e+01,  9.31943607e+00,\n",
       "        1.69574223e+01,  2.32409382e+01,  7.01285744e+00,  8.56988239e+00,\n",
       "        9.22324467e+00,  1.83200302e+01,  1.97070389e+01,  8.23924446e+00,\n",
       "        1.85846748e+01,  8.21347237e+00,  8.88322175e-01,  5.28902674e+00,\n",
       "        2.30550194e+01,  3.76048622e+01,  1.37266350e+01, -5.26195955e+00,\n",
       "        1.25991631e+00,  3.59030418e+01,  2.30008335e+01,  1.25045214e+01,\n",
       "        1.42511330e+01,  1.44894495e+01,  2.00980129e+01,  4.60178709e+00,\n",
       "        2.12821884e+01,  2.92507946e-01,  1.43802347e+01, -1.12755308e+01,\n",
       "        5.51703882e+00,  1.99904556e+01, -9.53189945e+00,  2.38501167e+01,\n",
       "        2.21841888e+01,  1.03028688e+01,  1.39367304e+01,  3.59220161e+01,\n",
       "        1.09285250e+01,  1.99214134e+01,  4.16076660e+00,  1.36037445e+01,\n",
       "        2.42459030e+01,  9.01815510e+00,  2.25269318e+01,  8.71446323e+00,\n",
       "        2.13557301e+01,  3.33994255e+01,  1.82340298e+01,  1.78063965e+01,\n",
       "        8.07314873e+00,  3.65494800e+00,  6.01301432e+00,  1.48908968e+01,\n",
       "        2.89288330e+01, -2.97180009e+00,  1.16285095e+01,  1.28103733e+01,\n",
       "        9.42481136e+00,  6.23714256e+00,  5.24934626e+00,  5.54769182e+00,\n",
       "        1.22101641e+01,  5.72375393e+00,  1.53640547e+01,  2.82762384e+00,\n",
       "        1.43723669e+01,  1.54491930e+01,  1.15668449e+01, -4.42382812e+00,\n",
       "        5.74675226e+00,  3.03141365e+01,  8.47856808e+00, -3.69165468e+00,\n",
       "        9.00705814e+00,  1.47471867e+01,  2.54571080e+00,  2.09548340e+01,\n",
       "        1.24476175e+01,  1.15544682e+01,  1.46679201e+01,  2.07975502e+01,\n",
       "        7.00452232e+00,  2.36687508e+01,  1.58326168e+01,  2.24514980e+01,\n",
       "        7.75100470e+00,  2.04857635e+00,  9.85742378e+00,  1.36826448e+01,\n",
       "        1.51106043e+01,  8.04574776e+00,  1.65849800e+01,  1.40659294e+01,\n",
       "        1.13456888e+01,  7.53765059e+00,  1.26608872e+00,  1.07132483e+01,\n",
       "       -4.25898504e+00,  1.44297972e+01,  1.31156845e+01, -4.08941925e-01,\n",
       "        1.10194349e+01, -4.88659620e-01,  7.84337473e+00,  1.41040392e+01,\n",
       "        9.07075977e+00,  1.03800373e+01,  2.42763252e+01,  1.71622849e+01,\n",
       "        4.35044348e-01,  4.91909933e+00,  7.71163940e+00,  1.35993934e+00,\n",
       "        1.17323351e+01,  1.44600668e+01, -1.41830826e+00,  1.56230688e+01,\n",
       "        1.10587635e+01,  3.12829375e+00,  9.21093750e+00,  1.01875677e+01,\n",
       "        1.61653042e+01,  1.79398193e+01,  1.71800213e+01,  1.41662798e+01,\n",
       "        2.10670242e+01,  1.87626705e+01,  1.83746223e+01,  2.37967186e+01,\n",
       "       -3.11031532e+00,  1.06287041e+01,  1.10649929e+01,  1.18835545e+01,\n",
       "       -3.25492024e+00,  2.36194181e+00,  2.06350574e+01,  8.80037689e+00,\n",
       "       -3.98173571e+00,  1.59968519e+01,  4.57439613e+00,  1.00864573e+01,\n",
       "        2.93454075e+00,  1.65736580e+01,  6.95971537e+00,  1.57369471e+01,\n",
       "        7.14866209e+00,  1.23550472e+01,  1.76608200e+01,  2.80059032e+01,\n",
       "        8.40474892e+00,  1.11162558e+01,  2.57018065e+00,  1.91409607e+01,\n",
       "        3.98633909e+00,  1.63624573e+01,  1.05172119e+01,  1.25032759e+01,\n",
       "        2.57488403e+01,  1.44351053e+01,  1.74290199e+01,  9.90795994e+00,\n",
       "        8.04115355e-01, -8.32227409e-01,  2.00010986e+01,  1.23490524e+01,\n",
       "        5.32445240e+00,  1.68526382e+01, -9.91469288e+00,  2.10447845e+01,\n",
       "        1.49824047e+01,  1.72348976e+01, -3.82044435e-01,  2.08005295e+01,\n",
       "        1.21851149e+01, -4.01246595e+00,  6.63244629e+00,  9.68052483e+00,\n",
       "        1.87689590e+01,  1.17483635e+01,  6.02572298e+00,  2.15645885e+01,\n",
       "        7.91433573e+00,  9.56934643e+00,  1.82975330e+01,  1.09548559e+01,\n",
       "       -8.30329704e+00,  1.16091681e+01,  3.04766884e+01,  1.86112881e+01,\n",
       "        1.82506027e+01,  1.31578045e+01,  1.68334985e+00,  1.84600410e+01,\n",
       "        1.49756689e+01,  1.03674431e+01, -9.87348020e-01,  1.06102991e+01,\n",
       "        1.84917030e+01,  9.99879456e+00,  2.16039391e+01,  1.59907560e+01,\n",
       "       -8.18476105e+00,  1.40763483e+01,  9.07093906e+00,  5.13319445e+00,\n",
       "        9.32429600e+00,  2.14757977e+01,  1.33446245e+01,  1.56870060e+01,\n",
       "       -2.33397651e+00,  8.70473576e+00,  1.44852018e+01,  1.15101061e+01,\n",
       "        1.08041153e+01,  7.09604645e+00,  6.72057211e-01,  9.30454159e+00,\n",
       "        3.05762362e+00,  4.31388283e+00,  8.93786335e+00,  1.32528286e+01,\n",
       "        2.55806313e+01,  8.10983944e+00,  5.19620943e+00,  1.24375877e+01,\n",
       "        1.28056717e+00,  9.00846958e+00,  1.09844933e+01,  1.42076807e+01,\n",
       "        1.43924017e+01,  1.27709532e+01,  2.44477749e+01,  3.76549292e+00,\n",
       "        3.30521622e+01,  1.13183851e+01, -4.73655462e+00,  7.29168177e+00,\n",
       "        2.24640579e+01,  1.59026527e+01,  1.22250452e+01,  5.29262495e+00,\n",
       "        6.66746378e+00,  9.34617519e+00, -6.47257376e+00,  2.25925407e+01,\n",
       "        2.28171444e+01,  1.00391531e+01,  9.89576626e+00,  3.59401360e+01,\n",
       "        5.88448477e+00,  1.06377230e+01,  1.15237379e+01,  2.25890660e+00,\n",
       "        1.82903061e+01,  4.73163843e+00,  3.57863402e+00,  1.59136705e+01,\n",
       "        1.54955168e+01,  1.48604231e+01,  3.38231163e+01,  9.54875851e+00,\n",
       "        9.05259418e+00, -4.70625305e+00,  1.26898098e+00,  5.45984554e+00,\n",
       "        1.94805183e+01,  3.83021593e+00,  1.62761898e+01,  1.13824072e+01,\n",
       "        3.00028057e+01,  1.46364641e+01,  5.76304579e+00,  1.28470087e+01,\n",
       "        8.04033661e+00,  9.41186905e+00, -7.15605974e+00,  2.34960556e+01,\n",
       "        2.57593193e+01,  1.25945930e+01,  2.45287418e+00, -8.82006550e+00,\n",
       "        1.43311501e+00, -2.10893393e+00,  1.37404871e+01,  1.35589256e+01,\n",
       "        1.58895464e+01,  1.47301292e+00,  1.02293611e+00,  6.55526304e+00,\n",
       "        2.16325684e+01,  2.26680946e+01,  9.17360210e+00,  2.38592291e+00,\n",
       "        2.08796234e+01,  7.62888384e+00,  8.20998669e+00,  6.12974405e+00,\n",
       "        1.43437252e+01,  1.32986717e+01,  2.21092319e+01, -2.99753761e+00,\n",
       "        2.28361874e+01,  5.82424498e+00,  1.65721703e+01,  1.04508638e+01,\n",
       "       -5.61037481e-01,  9.04030132e+00, -1.85369587e+00, -6.19945621e+00,\n",
       "        7.49347878e+00,  1.57405539e+01,  1.30119810e+01,  1.16821680e+01,\n",
       "        2.15409508e+01,  1.31206379e+01,  1.14654779e+01, -7.83937788e+00,\n",
       "        9.93672085e+00,  1.89226856e+01,  1.55634184e+01,  1.98487358e+01,\n",
       "        2.45473137e+01,  1.42575073e+01,  3.10168114e+01,  1.41314840e+01,\n",
       "        2.20806618e+01,  2.44133532e-01,  1.09472580e+01,  1.11259394e+01,\n",
       "        1.63074818e+01,  8.55929279e+00,  3.02378702e+00,  8.64762783e+00,\n",
       "        8.62939835e+00,  1.24078569e+01,  1.31767435e+01,  8.37857151e+00,\n",
       "        1.12355099e+01, -5.56885862e+00,  1.98822618e+00,  1.08831863e+01,\n",
       "        1.60342007e+01, -4.83937120e+00,  1.39768457e+01,  8.55564022e+00,\n",
       "        2.69598694e+01,  2.22848473e+01,  1.65422974e+01,  7.31299829e+00,\n",
       "        6.32038546e+00,  1.10350294e+01,  1.39784689e+01,  1.08362770e+01,\n",
       "        1.24361219e+01,  5.77837896e+00,  1.36945934e+01,  5.78000259e+00,\n",
       "        8.78215122e+00,  6.91487885e+00,  1.00350332e+01,  1.83079243e+01,\n",
       "        2.71453342e+01,  9.19384098e+00,  1.01497068e+01,  2.65196838e+01,\n",
       "        1.07771807e+01,  3.61783638e+01, -9.58545780e+00,  7.91070795e+00,\n",
       "        1.29767084e+01,  5.58410692e+00,  1.04197035e+01,  8.67470264e+00,\n",
       "        2.99565816e+00,  4.31162786e+00,  1.23706808e+01, -1.00477381e+01,\n",
       "        2.07627182e+01,  5.57173681e+00,  3.37792435e+01,  1.17844515e+01,\n",
       "        3.68238029e+01,  8.49353123e+00,  1.84149456e+01, -1.51130795e+00,\n",
       "        1.47798014e+00,  4.92351532e+00,  8.12909889e+00,  2.37265205e+01,\n",
       "        1.31607037e+01,  3.93318367e+00,  5.01314878e+00, -7.43543565e-01,\n",
       "        1.70664101e+01,  2.50848122e+01,  1.18531446e+01,  5.76687384e+00,\n",
       "        6.69923687e+00,  8.91844463e+00,  1.81758652e+01,  9.39127254e+00,\n",
       "        9.44104254e-01,  1.10983086e+01,  1.63659916e+01,  1.41592579e+01,\n",
       "        1.50546713e+01,  8.20660400e+00,  2.15766602e+01,  2.44052067e+01,\n",
       "       -2.89640307e+00,  3.31652718e+01,  8.89119625e+00,  1.15143919e+01,\n",
       "        2.26606712e+01,  1.80348015e+01, -5.54957628e+00,  1.45604858e+01,\n",
       "        2.24255219e+01,  2.26402855e+01,  8.77923107e+00,  1.87180290e+01,\n",
       "        9.88539696e+00,  1.21931705e+01,  9.06607723e+00,  1.12880335e+01,\n",
       "        5.30840302e+00,  4.03955841e+00,  2.05234947e+01,  6.88047218e+00,\n",
       "        3.28574038e+00,  5.96150827e+00,  4.28438282e+00,  2.17542381e+01,\n",
       "        2.05289097e+01,  2.17879333e+01,  2.50897617e+01,  2.23476562e+01,\n",
       "        4.15684760e-01,  9.91967392e+00,  2.52850418e+01,  2.31687622e+01,\n",
       "       -5.99139118e+00,  3.15825582e+00,  1.17412806e+01,  1.08226156e+01,\n",
       "        1.28843842e+01,  1.53609877e+01,  1.55500460e+01,  2.56242275e+01,\n",
       "        7.05003500e+00,  2.18674908e+01,  4.70246267e+00,  1.09540997e+01,\n",
       "        4.94560909e+00,  1.77318096e+01,  2.31206818e+01,  5.10684156e+00,\n",
       "        2.35062008e+01,  5.39717340e+00,  1.65840797e+01,  8.21289158e+00,\n",
       "        5.42460322e-01,  5.31786299e+00,  7.07352459e-01,  1.57171574e+01,\n",
       "        8.06980896e+00,  2.41975842e+01,  4.55721903e+00,  9.74836254e+00,\n",
       "        9.95681953e+00,  6.91409922e+00,  2.22204151e+01,  1.16566753e+01,\n",
       "        1.88402328e+01,  2.04839287e+01,  1.02038832e+01,  8.72211266e+00,\n",
       "        1.13065786e+01,  5.45545244e+00,  1.31973772e+01,  1.74488602e+01,\n",
       "       -8.91672075e-01,  3.88629985e+00,  2.46487694e+01,  2.36512794e+01,\n",
       "        1.69404907e+01,  2.26231308e+01,  7.57531929e+00,  2.35223713e+01,\n",
       "       -7.65149927e+00,  4.72353745e+00,  1.30333681e+01,  1.33021507e+01,\n",
       "        3.56245422e+00,  5.22231960e+00,  1.01096373e+01,  9.87868023e+00,\n",
       "        1.11884775e+01,  2.34905376e+01,  3.18089747e+00,  1.01423645e+00,\n",
       "        1.72709160e+01,  2.22154236e+01,  1.03937149e+01,  7.31569815e+00,\n",
       "        6.12623453e+00, -7.48793066e-01,  2.62970924e+01,  9.35934353e+00,\n",
       "        1.37548838e+01,  1.46267996e+01,  6.94086218e+00, -5.42225361e+00,\n",
       "        7.72242785e+00,  1.15373468e+01,  1.92043591e+00,  6.95767736e+00,\n",
       "        1.81627388e+01,  2.75776615e+01,  1.06560335e+01,  8.65256786e+00,\n",
       "        5.41433573e+00, -1.83847141e+00,  1.21927767e+01,  9.34704876e+00,\n",
       "        5.23401916e-01,  1.59954844e+01,  1.16177893e+01,  1.49109192e+01,\n",
       "       -7.48087883e+00,  1.33997641e+01,  9.32987881e+00, -3.15475225e+00,\n",
       "        1.21339769e+01,  8.65572512e-01,  1.36621428e+00,  3.96138144e+00,\n",
       "        1.60216999e+01,  2.14010983e+01,  1.45312700e+01, -4.97719526e+00,\n",
       "       -7.05041647e+00,  4.06028330e-01,  1.22767153e+01,  1.07131910e+01,\n",
       "        2.53618126e+01, -4.68165636e+00,  9.94122982e+00, -1.19373262e-01,\n",
       "        5.25376034e+00,  1.53152761e+01,  1.37358809e+01,  2.58199358e+00,\n",
       "        2.69510422e+01,  7.26710796e+00, -4.62480259e+00,  2.23411512e+00,\n",
       "       -1.62728608e-01,  2.01559563e+01,  4.77783966e+00,  2.07339268e+01,\n",
       "        2.17485929e+00, -4.21897840e+00,  1.79582443e+01,  2.56924133e+01,\n",
       "        5.42958379e-02,  8.45471859e+00, -8.51863623e-03,  8.59222317e+00,\n",
       "       -9.04575825e+00,  1.16075563e+01, -1.14275455e+00,  6.34161806e+00,\n",
       "        1.38815928e+01, -5.34617841e-01,  1.98878918e+01,  1.07986145e+01,\n",
       "       -1.69970417e+00,  2.20639153e+01, -7.26684046e+00,  2.04568367e+01,\n",
       "        1.22343969e+01,  1.17719870e+01,  1.34902716e+00,  1.53038588e+01,\n",
       "        1.09614983e+01,  2.26873035e+01,  2.35553417e+01,  2.47364101e+01,\n",
       "        1.33593416e+01, -5.61132431e-01,  8.16996956e+00,  2.30654564e+01,\n",
       "       -8.01410770e+00, -8.98291051e-01,  1.45159702e+01,  1.55494385e+01,\n",
       "        2.01250324e+01,  1.01884546e+01,  3.52106094e+00,  1.90379667e+00,\n",
       "        1.02278452e+01,  1.93317795e+00, -1.65920019e+00,  1.79335060e+01,\n",
       "        2.50203228e+01,  1.46760187e+01,  1.89536743e+01,  6.81720436e-01,\n",
       "        1.12539301e+01,  5.70701551e+00,  1.19409361e+01,  7.10875750e+00,\n",
       "        2.14405174e+01,  1.66218452e+01, -1.01633863e+01, -4.07000482e-01,\n",
       "        1.95195751e+01,  1.20623779e+01,  1.18265705e+01,  9.02749634e+00,\n",
       "        2.32892284e+01,  2.11249580e+01,  1.19282770e+01,  1.46764021e+01,\n",
       "        4.30505085e+00, -1.13375521e+00,  4.30413246e+00,  2.10732594e+01,\n",
       "        1.94167366e+01,  1.17082920e+01,  1.16413574e+01, -5.83134604e+00,\n",
       "        5.08134413e+00,  7.08483076e+00,  1.02123022e+01,  1.67187710e+01,\n",
       "        1.77774954e+00,  7.85527706e+00,  9.91878223e+00,  1.49914141e+01,\n",
       "        1.11550064e+01,  2.66737604e+00,  3.14687014e+00,  8.09222126e+00,\n",
       "        3.88090944e+00,  2.43266125e+01,  8.26557732e+00,  1.38881140e+01,\n",
       "        1.42352314e+01,  1.74019699e+01,  1.54186525e+01,  9.03495693e+00,\n",
       "        7.32462072e+00,  9.35812187e+00,  5.40676117e+00,  2.41262221e+00,\n",
       "       -3.22301209e-01,  1.13813524e+01,  2.63855209e+01,  2.56693649e+00,\n",
       "        2.24493103e+01,  7.21313524e+00,  1.28296509e+01,  2.32352009e+01,\n",
       "        3.26613655e+01, -7.06116152e+00,  1.31232710e+01,  1.39588919e+01,\n",
       "        2.04133472e+01,  1.59512777e+01,  1.73328495e+01,  3.84426546e+00,\n",
       "        2.83688354e+00,  4.55941868e+00,  8.56700134e+00,  2.26121292e+01,\n",
       "        1.14403610e+01,  1.35109415e+01,  2.44478531e+01,  1.19606018e+01,\n",
       "        1.26968088e+01,  3.50490685e+01,  2.61544838e+01,  1.73476315e+01,\n",
       "        1.27062330e+01,  6.04314756e+00,  6.39846087e+00,  7.81765747e+00,\n",
       "        1.82951331e+00,  4.19304705e+00, -7.88888884e+00, -8.47017574e+00,\n",
       "       -2.01484346e+00, -4.38735068e-01, -1.20713305e+00,  2.76146469e+01,\n",
       "        1.76631145e+01,  1.62807846e+01,  4.22956181e+00,  8.88971329e+00,\n",
       "        1.99258289e+01,  1.67826080e+01,  1.42044048e+01,  1.53009777e+01,\n",
       "        6.63665199e+00, -1.19233370e+00,  6.39587736e+00,  4.95086384e+00,\n",
       "        2.01835766e+01,  2.18423920e+01,  9.93408489e+00,  6.36015368e+00,\n",
       "        1.08379869e+01,  2.76308289e+01,  2.36231670e+01,  8.76011372e+00,\n",
       "        1.09003372e+01,  4.86231518e+00,  1.19680758e+01,  1.22772141e+01,\n",
       "       -1.87749803e-01,  1.46293306e+01,  5.24889040e+00,  2.98408890e+00,\n",
       "        2.23786259e+01,  1.08536730e+01,  2.01687241e+01,  1.87950211e+01,\n",
       "        2.73149610e+00, -4.30152941e+00,  3.15959587e+01,  1.61488304e+01,\n",
       "        1.53723497e+01], dtype=float32)"
      ]
     },
     "execution_count": 255,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predictions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 259,
   "id": "eb011be2",
   "metadata": {},
   "outputs": [],
   "source": [
    "#导入 sampleSubmission 表\n",
    "sampleSubmission = pd.read_csv(r'C:\\Users\\Administrator\\Desktop\\3-COVID-19\\sampleSubmission.csv', sep = ',')\n",
    "# 创建新表\n",
    "RNN_sampleSubmission = pd.DataFrame()\n",
    "RNN_sampleSubmission .to_csv(r'C:\\Users\\Administrator\\Desktop\\3-COVID-19\\RNN_sampleSubmission.csv', index=False)\n",
    "# 写入id列\n",
    "RNN_sampleSubmission[\"id\"] =sampleSubmission[\"id\"]\n",
    "# 将数据写入特定一列\n",
    "RNN_sampleSubmission['tested_positive'] = predictions[:len(sampleSubmission)]  # 只写入与数据帧行数相匹配的部分数组数据\n",
    "# 写回 CSV 文件\n",
    "RNN_sampleSubmission.to_csv(r'C:\\Users\\Administrator\\Desktop\\3-COVID-19\\RNN_sampleSubmission.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 260,
   "id": "f3441bf3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>tested_positive</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>14.707080</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>-4.503018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>-3.270153</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>12.055316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>0.327387</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>888</td>\n",
       "      <td>2.731496</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>889</td>\n",
       "      <td>-4.301529</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>890</td>\n",
       "      <td>31.595959</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>891</th>\n",
       "      <td>891</td>\n",
       "      <td>16.148830</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>892</th>\n",
       "      <td>892</td>\n",
       "      <td>15.372350</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>893 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      id  tested_positive\n",
       "0      0        14.707080\n",
       "1      1        -4.503018\n",
       "2      2        -3.270153\n",
       "3      3        12.055316\n",
       "4      4         0.327387\n",
       "..   ...              ...\n",
       "888  888         2.731496\n",
       "889  889        -4.301529\n",
       "890  890        31.595959\n",
       "891  891        16.148830\n",
       "892  892        15.372350\n",
       "\n",
       "[893 rows x 2 columns]"
      ]
     },
     "execution_count": 260,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "RNN_sampleSubmission"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
